package com.ycd.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.ycd.domain.MovieTicket;
import com.ycd.domain.User;
import com.ycd.fegin.MovieFeignClient;
import com.ycd.mapper.UserMapper;
import com.ycd.result.JsonResult;
import com.ycd.service.IUserService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author director
 * @since 2022-09-01
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {


    @Autowired
    private MovieFeignClient movieFeignClient;

    /**
     * 电影票查询：查询所有电影票业务
     * @return
     */
    @Override
    public JsonResult movies() {
        return movieFeignClient.list();
    }

    /**
     * 电影票购买业务
     * @param movieId
     * @return
     */
    @Override
    public JsonResult buyTicket(Long movieId) {
        // 判断电影服务业务购票是否成功
        JsonResult jsonResult = movieFeignClient.buyTicket(1L, movieId);
        if (!jsonResult.isSuccess()){ // 失败返回jsonResult
            return jsonResult;
        }
        // 如果购买成功扣减用户余额
        User user = selectById(1L);
        // Object转BigDecimal类型-在JsonResult中封装了一个工具类
        BigDecimal bigDecimal = JsonResult.getBigDecimal(jsonResult.getData());
        BigDecimal newDecimal = user.getBalance().subtract(bigDecimal);
        // 设置用户余额
        user.setBalance(newDecimal);
        // 更新用户表
        updateById(user);
        // 成功信息
        return JsonResult.success();
    }

    /**
     * 电影观看业务
     * @param movieId
     * @return
     */
    @Override
    public JsonResult watchMovie(Long movieId) {
        return movieFeignClient.watchMovie(1L, movieId);
    }
    @Override
    public boolean insert(User entity) {
        super.insert(entity);
        // 1.查询所有电影票 （优化的话可以专门再来一个接口，查询可以赠送的电影票）
        JsonResult jsonResult = movieFeignClient.list();
        // 如果是Object 需要转换成list对象集合，用强转要报错
        List<MovieTicket> movieTickets = JSONObject.parseArray(JSONObject.toJSONString(jsonResult.getData()), MovieTicket.class);
        // 得到随机数，随便拿一张电影票（优化的话可以专门再来一个接口，查询可以赠送的电影票）
        int random = (int)(Math.random() * movieTickets.size());
        MovieTicket movieTicket = movieTickets.get(random);
        // 给用户送电影票
        movieFeignClient.buyTicket(entity.getId(), movieTicket.getId());
        return true;
    }
}
